package com.jevoly.listener;

import com.jevoly.service.FileService;
import com.jevoly.utils.FileUtil;
import com.jevoly.utils.SpringUtil;
import org.apache.commons.io.monitor.FileAlterationListener;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.File;

/**
 * 文件夹监听器
 * 用来监听图片文件夹是否有更改
 */
@Component
public class DirectoryListener implements FileAlterationListener{

    private static Log log = LogFactory.getLog(DirectoryListener.class);



    DirectoryMonitor monitor = null;

    /**
     * 监控开始
     * @param fileAlterationObserver
     */
    @Override
    public void onStart(FileAlterationObserver fileAlterationObserver) {
//        log.info("监控开始...");
    }

    /**
     * 监控目录创建一个目录时触发
     * @param file
     */
    @Override
    public void onDirectoryCreate(File file) {
        FileService fileService = SpringUtil.getObject(FileService.class);
        log.info("监控目录有新目录创建，文件名：" + file.getName());
        FileUtil.dirCopy(file.getPath(), fileService.getAlbumPath());
    }

    /**
     * 监控目录中目录发生改变时触发
     * @param file
     */
    @Override
    public void onDirectoryChange(File file) {
        log.info("监控目录有目录改变，文件名：" + file.getName());
    }

    /**
     * 监控目录中目录发生删除时触发
     * @param file
     */
    @Override
    public void onDirectoryDelete(File file) {
        log.info("监控目录有目录删除，文件名：" + file.getName());
        FileUtil.deleteDir(file.getPath());
    }

    /**
     * 监控目录中创建文件时触发
     * @param file
     */
    @Override
    public void onFileCreate(File file) {
        FileService fileService = SpringUtil.getObject(FileService.class);
        log.info("监控目录有新文件被创建，文件名：" + file.getName());
        FileUtil.fileCopy(file.getPath(), fileService.getAlbumPath() + "/" + file.getName());
    }

    /**
     * 监控目录中文件发生改变时触发
     * @param file
     */
    @Override
    public void onFileChange(File file) {
        log.info("监控目录有文件改变，文件名：" + file.getName());

    }

    /**
     * 监控目录中文件发生删除时触发
     * @param file
     */
    @Override
    public void onFileDelete(File file) {
        log.info("监控目录有文件删除，文件名：" + file.getName());
        FileService fileService = SpringUtil.getObject(FileService.class);
        String serverPath = fileService.getAlbumPath() + "/" + file.getName();
        FileUtil.deleteFile(new File(serverPath));
    }

    /**
     * 监控停止
     * @param fileAlterationObserver
     */
    @Override
    public void onStop(FileAlterationObserver fileAlterationObserver) {
//        log.info("监控结束...");
    }
}
 